package com.danciyixue.boot.dcyx.service;

import com.danciyixue.boot.dcyx.model.form.DcyxUsersBatchCreateForm;
import com.danciyixue.boot.dcyx.model.entity.DcyxUsers;
import com.danciyixue.boot.dcyx.model.form.DcyxUsersForm;
import com.danciyixue.boot.dcyx.model.query.DcyxUsersQuery;
import com.danciyixue.boot.dcyx.model.vo.DcyxUsersBatchCreateResultVO;
import com.danciyixue.boot.dcyx.model.vo.DcyxAssignTeacherBatchResultVO;
import com.danciyixue.boot.dcyx.model.vo.DcyxUsersVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 用户信息服务类
 *
 * @author youlaitech
 * @since 2025-06-15 16:58
 */
public interface DcyxUsersService extends IService<DcyxUsers> {

    /**
     *用户信息分页列表
     *
     * @return {@link IPage<DcyxUsersVO>} 用户信息分页列表
     */
    IPage<DcyxUsersVO> getDcyxUsersPage(DcyxUsersQuery queryParams);

    /**
     * 获取用户信息表单数据
     *
     * @param id 用户信息ID
     * @return 用户信息表单数据
     */
     DcyxUsersForm getDcyxUsersFormData(Long id);

    /**
     * 新增用户信息
     *
     * @param formData 用户信息表单对象
     * @return 是否新增成功
     */
    boolean saveDcyxUsers(DcyxUsersForm formData);

    /**
     * 修改用户信息
     *
     * @param id   用户信息ID
     * @param formData 用户信息表单对象
     * @return 是否修改成功
     */
    boolean updateDcyxUsers(Long id, DcyxUsersForm formData);

    /**
     * 删除用户信息
     *
     * @param ids 用户信息ID，多个以英文逗号(,)分割
     * @return 是否删除成功
     */
    boolean deleteDcyxUserss(String ids);

    /**
     * 根据用户名获取用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    DcyxUsers getByUsername(String username);

    /**
     * 根据 token 查询用户信息
     * @return 用户Vo信息
     */
    DcyxUsersVO getDcyxUsersMe();

    /**
     * 重置用户密码
     *
     * @param userId 用户ID
     * @param password 新密码
     * @return 是否重置成功
     */
    boolean resetPassword(Long userId, String password);

    /**
     * 批量创建账号
     *
     * @param form 请求参数
     * @return 新建账号列表
     */
    List<DcyxUsersBatchCreateResultVO> batchCreateAccounts(DcyxUsersBatchCreateForm form);

    /**
     * 指定学生归属老师
     *
     * @param userId    学生ID
     * @param teacherId 老师ID
     * @return 是否更新成功
     */
    boolean assignTeacher(Long userId, Long teacherId);

    /**
     * 批量分配归属老师
     *
     * @param teacherId 老师ID
     * @param userIds   学生ID列表
     * @return 批量分配结果
     */
    DcyxAssignTeacherBatchResultVO assignTeacherBatch(Long teacherId, List<Long> userIds);

}
